package com.the_last.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.the_last.pojo.dto.IncrementalUserRoleDTO;
import com.the_last.pojo.po.SysUserRole;
import com.the_last.utils.Result;

import java.util.List;

public interface ISysUserRoleService extends IService<SysUserRole> {
    
    /**
     * 增量分配用户角色（推荐使用）
     * 支持同时进行角色的增加和删除操作，避免全量替换
     *
     * @param incrementalDTO 增量操作DTO
     * @return 操作结果
     */
    Result<Void> incrementalAssignUserRoles(IncrementalUserRoleDTO incrementalDTO);
    
    /**
     * 移除用户角色
     *
     * @param userId 用户ID
     * @param roleIds 角色ID列表
     * @return 操作结果
     */
    Result<Void> removeRolesFromUser(Long userId, List<Long> roleIds);
    
    /**
     * 获取用户的角色ID列表
     *
     * @param userId 用户ID
     * @return 角色ID列表
     */
    Result<List<Long>> getRoleIdsByUserId(Long userId);
    
    /**
     * 获取角色的用户ID列表
     *
     * @param roleId 角色ID
     * @return 用户ID列表
     */
    Result<List<Long>> getUserIdsByRoleId(Long roleId);
    
    /**
     * 批量分配用户角色
     *
     * @param userIds 用户ID列表
     * @param roleId 角色ID
     * @return 操作结果
     */
    Result<Void> batchAssignRoleToUsers(List<Long> userIds, Long roleId);
    
    /**
     * 清除用户所有角色
     *
     * @param userId 用户ID
     * @return 操作结果
     */
    Result<Void> clearUserRoles(Long userId);
    
    /**
     * 检查用户是否拥有指定角色
     *
     * @param userId 用户ID
     * @param roleCode 角色编码
     * @return 是否拥有角色
     */
    Result<Boolean> hasRole(Long userId, String roleCode);
    
}